#include <iostream>
#include <random>
#include <sstream>
#include <iomanip>
#include <atomic>

using std::cout;
using std::endl;

// uuid:通用唯一识别码 32位16进制数
// 项目uuid：8个（0-255）随机数 + 8字节序号 = 16字节 = 16*8 = 32*4 = 32位16进制 = 8-4-4-4-12 uuid
// 其中8-4-4是随机数，4-12是从1自增的序号

int main()
{
    std::random_device rd;
    // size_t num = rd(); // 生成机器随机数（真随机数），效率较低

    std::mt19937_64 generater(rd()); // 使用一个机器随机数作为梅森旋转算法的种子，生成伪随机数

    std::uniform_int_distribution<int> distribution(0, 255); // 限制随机数的范围

    // cout << "Random Value:" << generater() << endl;
    // cout << "Random Value[0,255]:" << distribution(generater) << endl;

    for (int i = 0; i < 100; i++)
    {
        std::stringstream ss;
        for (int i = 0; i < 8; i++)
        {
            ss << std::setw(2) << std::setfill('0') /*设置位宽，填充为0*/ << std::hex << distribution(generater);
            if (i == 3 || i == 5 || i == 7) // 8-4-4
                ss << "-";
        }
        static std::atomic<size_t> seq(1);
        size_t num = seq.fetch_add(1);
        for (int i = 7; i >= 0; i--)
        {
            ss << std::setw(2) << std::setfill('0') /*设置位宽，填充为0*/ << std::hex << ((num >> (8 * i)) & 0xff);
            if (i == 6) // 8-4-4-4-12
                ss << "-";
        }
        cout << ss.str() << endl;
    }
    return 0;
}